import frappe
from frappe.model.document import Document

class AC_BalanceSheet_Config_Item(Document):
    def validate(self):
        """验证子表项数据"""
        # 验证系数和序号为整数类型
        if self.rate is not None:
            try:
                self.rate = int(self.rate)
            except ValueError:
                frappe.throw("系数必须是整数")
        
        if self.sort_id is not None:
            try:
                self.sort_id = int(self.sort_id)
            except ValueError:
                frappe.throw("序号必须是整数")
        
        # 优化科目验证：允许科目中存在公司简称或占位符
        if self.acct:
            accounts = self.acct.split(",")
            for account in accounts:
                account = account.strip()
                # 提取科目代码（假设格式为"代码 - 名称 - 简称"）
                code = account.split(" - ")[0] if " - " in account else account
                
                # 检查科目代码是否存在（忽略简称部分）
                if code and not frappe.db.exists("Account", code):
                    frappe.throw(f"科目代码 '{code}' 不存在")
        
        # 验证报表项目不为空
        if not self.rpt_item or not self.rpt_item.strip():
            frappe.throw("报表项目不能为空")